package com.dura.strategy.filter.impl;

import com.dura.common.enums.ExceptionEnums;
import com.dura.common.exception.StrategyException;
import com.dura.common.model.StandardSubmit;
import com.dura.strategy.filter.StrategyFilter;
import com.dura.strategy.util.ErrorSendMsgUtil;
import com.dura.strategy.util.HutoolDFAUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @version 1.0
 * @Author 振鹏
 * @Date 2025/3/16 19:44
 * @注释
 */
@Service(value = "dirtyword")
@Slf4j
public class DirtyWordHutoolDFAStrategyFilter implements StrategyFilter {


    @Autowired
    private ErrorSendMsgUtil errorSendMsgUtil;

    @Override
    public void strategy(StandardSubmit submit) {
        log.info("【策略模块-敏感词校验】 校验ing................");
        // 获取短信内容
        String text = submit.getText();

        // 敏感词判断
        List<String> dirtyWord = HutoolDFAUtil.getDirtyWord(text);

        // 根据判断的结果，判断是否含有敏感词；含有敏感词，直接抛出异常 & 其他操作（通知之类的）
        if(dirtyWord!=null && dirtyWord.size()>0){
            // 存在敏感词，需要对其进行判断
            log.info("【策略模块-敏感词校验】 存在敏感词，需要对其进行判断 敏感词 = {}", dirtyWord);
            // 封装错误信息，发送写日志  发送消息到日志队列
            submit.setErrorMsg(ExceptionEnums.HAVE_DIRTY_WORD.getMsg() + "dirtyWords = " + dirtyWord.toString());
            errorSendMsgUtil.sendWriteLog(submit);
            // 发送状态报告信息 发送消息到状态报告队列
            errorSendMsgUtil.sendPushReport(submit);
            // 抛出异常
            throw new StrategyException(ExceptionEnums.HAVE_DIRTY_WORD);
        }

        log.info("【策略模块-敏感词校验】   校验通过，没有敏感词信息");
    }
}
